Wizualizacj nie jest poprawna, ponieważ zastosowany został wykres słupkowy zawierający tylko jeden słupek, który dla każdego roku zajmuje swoją wysokością całe okno z wykresem.
Wynikiem takiego niefortunnego sposobu prezentowania danych jest wykres, który nie tylko przez brak innych słupków uniemożliwia porównywanie długości między słupkami, tym samym mijając się z celem wykresu takiego typu, ale też ten pojedynczy słupek ma stałą długość, co sprawia, że sam fakt tworzenia wykresu do zwizualizowania takich danych traci jakikolwiek sens.
# Instalowanie pakietów --------------------------------------------------------
# install.packages("dplyr")
# install.packages("tidyr")
# install.packages("plotly")
# install.packages("rnaturalearth")
# Wszytywanie bibliotek --------------------------------------------------------
library(dplyr)
library(tidyr)
library(plotly)
library(rnaturalearth)
# Wczytywanie danych danych ----------------------------------------------------
life_expectancy_df <- read.csv("API_SP.DYN.LE00.IN_DS2_en_csv_v2_5994853.csv")
# Dane użyte na licencji:
# Creative Commons Attribution 4.0 (CC-BY 4.0)
# https://data.worldbank.org/indicator/SP.DYN.LE00.IN?end=1963&start=1963&view=bar&year=1964
# Przygotowywanie danych -------------------------------------------------------
tmp1 <- ne_countries(scale = "small", returnclass = "sf") %>%
select(adm0_a3, continent)
tmp2 <- life_expectancy_df %>%
select(-one_of(c("Indicator.Code", "Indicator.Name", "X", "X2022", "Country.Name", "Country.Code"))) %>%
summarise_all(mean, na.rm = TRUE) %>%
mutate(continent = "World")
df <- left_join(life_expectancy_df, tmp1, by = c("Country.Code" = "adm0_a3")) %>%
select(-one_of(c("geometry", "Country.Code", "Country.Name"))) %>%
drop_na(continent) %>%
group_by(continent) %>%
summarise_all(mean, na.rm = TRUE)
df <- bind_rows(tmp2, df)
colnames(df)[1:63] <- gsub("X", "", colnames(df)[1:63])
df <- df %>%
pivot_longer(cols = `1960`:`2021`,
names_to = "year",
values_to = "Life expectancy") %>%
mutate(hover = if_else(continent == 'World',
with(df, paste0("Mean life expectancy\nglobally in year ",
year, ":\n", round(`Life expectancy`, 2), " years")),
with(df, paste0("Mean life expectancy\nin ",
continent, "\nin year ",
year, ":\n", round(`Life expectancy`, 2), " years"))))
# Tworzenie wykresu ------------------------------------------------------------
figure <-
plot_ly(data = df,
y = ~continent,
x = ~`Life expectancy`,
type = 'bar',
orientation = 'h',
color = ~continent,
frame = ~year,
text = ~hover,
hoverinfo = "text") %>%
layout(title = 'Mean life expectancy in years 1960-2021',
legend = list(traceorder= 'reversed'),
yaxis = list(title = 'Region'),
xaxis = list(title = 'Mean life expectancy'),
barmode = 'group') %>%
animation_slider(currentvalue = list(prefix = "Year ", font = list(color="black"))) %>%
animation_opts(redraw = FALSE, mode = "immediate") %>%
animation_button(visible = FALSE) %>%
config(displayModeBar = FALSE)
Nowa wizualizacja jest lepsza, ponieważ dodane zostały dodatkowe słupki, reprezentujące średnią oczekiwaną dalszą długość trwania życia w danym roku, pokazujące stan na konkretnych kontynentach, co umożliwia porównanie łatwe porównywanie danych między grupami, jak i zasięg wartości na osi poziomej jest stały, dzięki czemu słupki nie zmieniają swojej wysokości wraz ze zmianą roku obserwacji, pozwalając tym saym na łatwiejsze porównywanie danych między latami.